package cn.luncene;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

import java.io.File;

/**
 * @author Administrator
 * @Title: 萧萧
 * @ProjectName lucene
 * @Description: 查询索引
 * @date 2018/9/26 19:12
 */
/*
    第一步：创建一个Directory对象，也就是索引库存放的位置。
    第二步：创建一个indexReader对象，需要指定Directory对象。
    第三步：创建一个indexsearcher对象，需要指定IndexReader对象
    第四步：创建一个TermQuery对象，指定查询的域和查询的关键词。
    第五步：执行查询。
    第六步：返回查询结果。遍历查询结果并输出。
    第七步：关闭IndexReader对象
 */
public class searchIndex {
    @Test
    public void test() throws Exception{
        //指定索引库存放路径
        Directory directory = FSDirectory.open(new File("I:\\视频\\lucene学生\\02.参考资料\\index").toPath());
        //创建IndexReader对象
        IndexReader indexReader = DirectoryReader.open(directory);
        //创建IndexSearch对象
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        //创建查询对象
        Query query = new TermQuery(new Term("name","web"));

        //执行查询
        //第一个参数是查询对象，第二个参数是查询结果返回的最大值,相当于分页
        TopDocs topDocs = indexSearcher.search(query,10);
        //打印查询结果的总条数
        System.out.println("查询结果的总条数"+topDocs.totalHits);

        //遍历查询结果
        //topDocs.scoreDocs存储了所有的document对象的id
        for(ScoreDoc scoreDoc:topDocs.scoreDocs){
            System.out.println("-------四季如花-------------------");
            //scoreDoc.doc属性就是document对象的id
            //根据document对象的id查找到指定的文档对象
            Document document = indexSearcher.doc(scoreDoc.doc);

            //打印文档对象的域内容
            System.out.println(document.get("name"));
            System.out.println(document.get("size"));
            //System.out.println(document.get("content"));
            System.out.println(document.get("path"));
            System.out.println("-------人生如雪-------------------");
        }

        //关闭indexReader对象
        indexReader.close();
    }
}
